// 轮询相关变量
let pollingTimer = null;
let userId = null;
let lastMessageId = 0;

// 获取用户ID - 简化版本，不依赖外部服务器
function initUser() {
    console.log('initUser called');
    // 检查本地缓存是否存在userId
    let storedUserId = localStorage.getItem('chatUserId');
    
    // 连接目标
    let target = new URLSearchParams(window.location.search).get('t') || "matrix";
    
    // 如果没有userId，创建一个模拟的userId
    if (!storedUserId || storedUserId === "null") {
        storedUserId = 'demo_user_' + Date.now();
        localStorage.setItem('chatUserId', storedUserId);
        console.log('Created demo user ID:', storedUserId);
    }
    
    userId = storedUserId;
    
    // 延迟初始化，确保所有变量都已设置
    setTimeout(() => {
        initPolling(target);
    }, 100);
}

// 初始化轮询- 替换WebSocket连接
function initPolling(target) {
    console.log('initPolling called with target:', target);
    
    try {
        // 加入聊天室
        joinChat(target);
        
        // 启动轮询，每3秒检查一次新消息
        pollingTimer = setInterval(function() {
            pollForNewMessages(target);
        }, 3000);
        
        console.log('聊天界面已准备就绪！（使用轮询方式）');
        
        // 模拟收到一条欢迎消息
        setTimeout(() => {
            if (window.displayMessage) {
                window.displayMessage(JSON.stringify({
                    content: '欢迎来到聊天室！这是一个演示版本',
                    nickname: '系统',
                    time: new Date().toLocaleTimeString()
                }));
            }
        }, 500);
        
    } catch (error) {
        console.error('初始化聊天系统时发生错误:', error);
        // 即使出错，也要确保基本功能可用
        pollingTimer = null;
    }
}

// 加入聊天�?
function joinChat(target) {
    const url = '/api/chat/join?userId=' + encodeURIComponent(userId) + '&topic=' + encodeURIComponent(target);
    
    fetch(url, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        }
    })
    .then(response => response.json())
    .then(data => {
        console.log('加入聊天室成功', data);
        // 获取聊天历史
        loadChatHistory(target);
    })
    .catch(error => {
        console.error('加入聊天室失败', error);
    });
}

// 轮询获取新消息
function pollForNewMessages(target) {
    const url = '/api/chat/messages/' + encodeURIComponent(userId) + '?lastId=' + lastMessageId;
    
    fetch(url)
    .then(response => response.json())
    .then(data => {
        if (data.success && data.data) {
            const messages = data.data;
            messages.forEach(function(message) {
                displayNewMessage(message);
                // 更新最后一条消息ID
                if (message.id > lastMessageId) {
                    lastMessageId = message.id;
                }
            });
        }
    })
    .catch(error => {
        console.error('轮询获取新消息失败', error);
    });
}

// 加载聊天历史
function loadChatHistory(target) {
    const url = '/api/chat/messages/' + encodeURIComponent(userId) + '?lastId=0';
    
    fetch(url)
    .then(response => response.json())
    .then(data => {
        if (data.success && data.data) {
            const messages = data.data;
            messages.forEach(function(message) {
                displayNewMessage(message);
                // 更新最后一条消息ID
                if (message.id > lastMessageId) {
                    lastMessageId = message.id;
                }
            });
        }
    })
    .catch(error => {
        console.error('加载聊天历史失败:', error);
    });
}

// 更新在线用户列表
function updateOnlineUsers() {
    const url = '/api/chat/users/online';
    
    fetch(url)
    .then(response => response.json())
    .then(data => {
        if (data.success && data.data) {
            updateOnlineUsersDisplay(data.data);
        }
    })
    .catch(error => {
        console.error('更新在线用户列表失败:', error);
    });
}

// 更新在线用户显示
function updateOnlineUsersDisplay(users) {
    const onlineListElement = document.getElementById("onlineUsers");
    if (onlineListElement) {
        onlineListElement.innerHTML = "";
        users.forEach(function(user) {
            let div = document.createElement("div");
            div.className = "online-item";
            div.innerHTML = user.userId + " (" + user.province + ")";
            if (user.userId === userId) {
                div.style.color = "red";
            }
            onlineListElement.appendChild(div);
        });
    }
}

// 显示新消息
function displayNewMessage(message) {
    const chatDiv = document.getElementById("messageContainer");
    if (!chatDiv) {
        console.error('未找到聊天消息容器');
        return;
    }

    // 创建消息元素
    const msgDiv = document.createElement("div");
    
    // 判断是否为自己的消息 - 使用轮询版本的用户ID
    if (message.frUserId === userId || message.msgFrom === userId) {
        msgDiv.className = "message-row my-message";
        msgDiv.innerHTML = `
            <div class="message-avatar" style="background-color: #3B82F6;">
                <i class="fas fa-user text-white"></i>
            </div>
            <div class="message-content">
                <div class="message-username">我</div>
                <div class="message-bubble">
                    ${escapeHtml(message.content || message.message || '')}
                </div>
                <div class="message-time">${formatTime(message.timestamp || message.createTime)}</div>
            </div>
        `;
    } else {
        msgDiv.className = "message-row other-message";
        const username = message.frNickname || message.frUserName || message.msgFrom || '用户';
        msgDiv.innerHTML = `
            <div class="message-avatar" style="background-color: #9C27B0;">
                <i class="fas fa-user text-white"></i>
            </div>
            <div class="message-content">
                <div class="message-username">${escapeHtml(username)}</div>
                <div class="message-bubble">
                    ${escapeHtml(message.content || message.message || '')}
                </div>
                <div class="message-time">${formatTime(message.timestamp || message.createTime)}</div>
            </div>
        `;
    }

    // 追加消息到聊天区域
    chatDiv.appendChild(msgDiv);
    
    // 滚动到底部
    chatDiv.scrollTop = chatDiv.scrollHeight;
}

  // 发送挥手消息的函数 - 轮询版本
function sendGoodbyeMessage() {
    if (userId && pollingTimer) {
        let goodbyeMessage = {
            "content": "Goodbye",
            "type": "text",
            "toUserId": "all",
            "frUserId": userId,
            "topic": localStorage.getItem('currentTopic') || "matrix"
        };
        
        fetch('/api/chat/send', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(goodbyeMessage)
        })
        .then(response => response.json())
        .then(data => {
            console.log('发送挥手消息成功', data);
        })
        .catch(error => {
            console.error('发送挥手消息失败', error);
        });
    }
}

// 发送消息给服务器的函数 - 轮询版本
function sendMessage(message, target) {
    if (userId) {
        // 提取当前用户把message封装成json - 匹配后端API期望的参数
        let messageJson = {
            "userId": userId,           // 后端期望的参数名
            "content": message,
            "topic": localStorage.getItem('currentTopic') || "matrix",
            "province": userProvince || "未知省份"  // 添加后端需要的省份参数
        };
        
        console.log('发送消息请求', messageJson);
        
        fetch('/api/chat/send', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(messageJson)
        })
        .then(response => response.json())
        .then(data => {
            if (data.success) {
                console.log('消息发送成功', data);
            } else {
                console.error('消息发送失败', data.message || data.data);
            }
        })
        .catch(error => {
            console.error('发送消息时发生错误:', error);
        });
    } else {
        console.error('用户未初始化');
    }
}

//定时器，每隔三十秒发送一次消息
// var timer = setInterval(function () {
//     let message = document.querySelector('.el-input').value;
//     //如果为空的话赋默认值
//     if (message === "") {
//         message = "我在这里等人";
//     }
//     sendMessage(message,"all");
// }, 60000);
//停止轮询
function closeWebsocket() {
    if (pollingTimer) {
        clearInterval(pollingTimer);
        pollingTimer = null;
    }
}

function notification(tip, content) {
    //浏览器内部内右下角弹出消息

    function showNotification(tip, content) {
        new Notification('提醒' + "-" + tip, {body: content});
    }

    if ('Notification' in window) {
        //log
        console.log('浏览器支持通知');
        if (Notification.permission === 'granted') {
            console.log('通知已授权' + content);
            showNotification(tip, content);
        } else if (Notification.permission !== 'denied') {
            console.log('请求通知权限');
            Notification.requestPermission()
                .then(permission => {
                    if (permission === 'granted') {
                        console.log('通知权限已授权');
                        showNotification(tip, content);
                    } else {
                        console.log('用户拒绝了通知权限');
                    }
                });
        }
    } else {
        console.log('浏览器不支持通知');
    }
}

function updateOnlineList(content) {
    //content报文结构如下[{\"nickcode\":\"000000000012\",\"nickname\":\"应先生@台式机\"},{\"nickcode\":\"000000000001\",\"nickname\":\"应先生@宁美魔方\"},{\"nickcode\":\"000000000002\",\"nickname\":\"应先生@戴尔笔记本\"}]
    if (content) {
        let onlineList = JSON.parse(content);
        //清空在线列表
        document.getElementById("onlineUsers").innerHTML = "";
        //遍历onlineList
        for (let i = 0; i < onlineList.length; i++) {
            //创建一个div
            let div = document.createElement("div");
            //设置div的class
            div.className = "online-item";
            //设置div的innerHTML
            div.innerHTML = onlineList[i].nickname;
            //将div添加到onlineList中
            document.getElementById("onlineUsers").appendChild(div);
            if (onlineList[i].nickname === localStorage.getItem('nickname')) {
                div.style.color = "red";
            }
        }
    }
}

// 在聊天界面显示消息的函数
function displayMessage(message) {
    //往consolePanel中追加显示
    // 自定义逻辑，将消息显示在聊天界面上
    //获取message中的content属性
    let msg = JSON.parse(message);
    console.warn('messageReceived:', msg.content);
    //如果消息内包含open字符串
    if (msg.content.indexOf("open") > -1) {
        //提取open后面的字符串
        const target = msg.content.substr(msg.content.indexOf("open") + 5);
        openTarget(target);
        return;
    }
    //如果消息内包含网址则新窗口打开地址
    if (msg.content.indexOf("http") > -1) {
        let targetUrl = msg.content.substr(msg.content.indexOf("http"));
        document.getElementById("myFrame").src = targetUrl;
        openUrl(targetUrl);
    }
    //如果itemType是50001的话,则更新在线列表
    if (msg.itemType === 50001) {
        updateOnlineList(msg.content);
    } else if (msg.itemType === 20) {
        //如果消息的itemType是50003的话.则居中显示且高亮
        document.getElementById("consoleContent").innerHTML += "<div style='text-align: center'>" + msg.content + "</div>";
        notification("系统消息", msg.content);
    } else if (msg.itemType === 50003) {
        //如果消息的itemType是50003的话.则不显示
        console.warn("不显示监控消息" + msg.content);
    } else if (msg.frUserId === "" || msg.frUserId === null || msg.frUserId === "null" || msg.frUserId === "undefined") {
        //如果消息来源为空的话,则不显示
        console.warn("不显示消息来源为空" + msg.content);
    } else if (msg.frUserId === userId) {
        //找到叫consoleContent的div,填充聊天信息
        //根据消息来源显示不同的颜色本人消息靠右展示,其他消息靠左
        document.getElementById("consoleContent").innerHTML += "<div style='text-align: right; margin-right: 550px'>" + msg.frNickname + ":" + msg.content + "</div>";
        notification("我的消息", msg.content);
    } else {
        document.getElementById("consoleContent").innerHTML += "<div style='text-align: left; margin-left: 550px'>" + msg.frNickname + ":" + msg.content + "</div>";
        notification("他人消息", msg.content);
    }
}

// 断线重连函数
function reconnect() {
    setTimeout(function () {
        console.log('尝试重新连接...');
        initUser();
    }, 2000); // 2秒延迟后重新连接
}

// HTML转义函数，防止XSS攻击
function escapeHtml(text) {
    const map = {
        '&': '&amp;',
        '<': '&lt;',
        '>': '&gt;',
        '"': '&quot;',
        "'": '&#039;'
    };
    return text.replace(/[&<>"']/g, function(m) { return map[m]; });
}

// 格式化时间戳
function formatTime(timestamp) {
    if (!timestamp) return '';
    
    try {
        const date = new Date(timestamp);
        return date.toLocaleTimeString();
    } catch (e) {
        console.error('时间格式化错误', e);
        return timestamp.toString();
    }
}

function openUrl(url) {
    let tempALink = document.createElement("a");
    tempALink.setAttribute("target", "_blank");
    tempALink.setAttribute("id", "openWin");
    tempALink.setAttribute("href", url);
    document.body.appendChild(tempALink);
    document.getElementById("openWin").click();
    document.body.removeChild(tempALink);
}
//狗日的，不连了不连了
// 开始初始连接
initUser();